package com.zdft.promotion.common.service.api;

/**
 * 业务服务接口：缓存
 */
public interface ICacheService {
    /**
     * 获取缓存对象
     *
     * @param key key
     * @param <T> 对象类型
     * @return 对象
     */
    <T> T get(String key);

    /**
     * 获取缓存对象
     *
     * @param key      key
     * @param getter   对象获取者
     * @param argument 入参
     * @param keepTime 保持缓存时间，单位秒
     * @param <P>      参数类型
     * @param <T>      对象类型
     * @return 对象
     */
    <P, T> T get(String key, IGetter<P, T> getter, P argument, int keepTime);

    /**
     * 设置缓存对象
     *
     * @param key      key
     * @param value    对象
     * @param keepTime 保持缓存时间，单位秒
     */
    void set(String key, Object value, int keepTime);

    /**
     * 设置缓存对象
     * @param key
     * @param value
     * @param keepTime
     */
    void setAWeek(String key, Object value, int keepTime);

    /**
     * 设置缓存对象
     * 仅当缓存key不存在时可成功设置
     *
     * @param key      key
     * @param value    对象
     * @param keepTime 保持缓存时间，单位秒
     * @return 是否设置成功
     */
    boolean setNx(String key, Object value, int keepTime);

    /**
     * 删除缓存对象
     *
     * @param key key
     */
    void delete(String key);

    /**
     * 设置失效时间
     *
     * @param key      key
     * @param keepTime 保持缓存时间，单位秒
     */
    void expire(String key, int keepTime);
}
